/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package ejb;

import dtos.LinhaVendaDTO;
import entidades.LinhaVenda;
import entidades.ProdutoCatalogo;
import entidades.Venda;
import excecoes.EntidadeExistenteException;
import excecoes.EntidadeNaoExistenteException;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.EJBException;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

/**
 *
 * @author Diogo
 */
@Stateless
public class LinhaVendaBean {

    public LinhaVendaBean() {
    }
        
    @PersistenceContext
    private EntityManager em;

    void criarLinhaVenda(int linhaVendaId, Venda venda, int quantidade, ProdutoCatalogo produtoCatalogo) throws EntidadeExistenteException {
        try {
            if(existeLinhaVenda(linhaVendaId)){
                throw new EntidadeExistenteException("Linha Venda já existente!");
            }
            LinhaVenda lv = new LinhaVenda(linhaVendaId, venda, quantidade, produtoCatalogo);
            em.persist(lv);
            em.flush();
            venda.addLinhaVenda(lv);

        } catch (EntidadeExistenteException e) {
            throw e;
        } catch (Exception e) {
            throw new EJBException(e.getMessage());
        }
    }

    int atualizarLinhaVenda(int idLinhaVenda, int quantidade) throws EntidadeNaoExistenteException {
        try {
            LinhaVenda lv =em.find(LinhaVenda.class, idLinhaVenda);
            if(lv == null){
                throw new EntidadeNaoExistenteException("Linha venda não existente!");
            }       
            if (lv.getQuantidade() - quantidade <= 0) {
                em.remove(lv);
                return 0;
            }else{
                lv.setQuantidade(quantidade);
                em.merge(lv);
                return 1;
            }
        } catch (EntidadeNaoExistenteException e) {
            throw e;            
        } catch (Exception e) {
            throw new EJBException(e.getMessage());
        }
    }
    
    public void removerLinhaVenda(int idLinhaVenda) throws EntidadeNaoExistenteException {
        try {
            
            LinhaVenda lv = em.find(LinhaVenda.class, idLinhaVenda);
            if(lv == null){
                throw new EntidadeNaoExistenteException("Linha Venda não existente!");
            }   
            
            em.remove(lv);
           
        } catch (EntidadeNaoExistenteException e) {
            throw e;
        } catch (Exception e) {
            throw new EJBException(e.getMessage());
        }
    }
    
    private boolean existeLinhaVenda(int linhaVendaId) {
        return em.find(LinhaVenda.class, linhaVendaId) != null;
    }

    private List<LinhaVendaDTO> copiarLinhasVendasParaDTOs(List<LinhaVenda> lvs) {

        List<LinhaVendaDTO> dtos = new ArrayList<>();

        for (LinhaVenda lv : lvs) {
            dtos.add(new LinhaVendaDTO(
                    lv.getId(),
                    lv.getVenda().getId(),
                    lv.getProdutoCatalogo().getId(),
                    lv.getQuantidade() ));
        }
        return dtos;
    }
    
}
